package top.likeqc.leetcode.editor.cn;

import java.util.ArrayList;
import java.util.List;

/** 链接: https://leetcode.cn/problems/ambiguous-coordinates */
public class AmbiguousCoordinates {
    public static void main(String[] args) {
        Solution solution = new AmbiguousCoordinates().new Solution();
        solution.ambiguousCoordinates("(123)");
    }
    // leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public List<String> ambiguousCoordinates(String s) {
            // 1.去除左右圆括号
            s = s.substring(1, s.length() - 1);
            List<String> res = new ArrayList<>();
            // 2.模拟逗号将数字字符串分为左右两个部分
            for (int i = 1; i < s.length(); i++) {
                // 3.1.获取左边字符串所有可能的数字
                List<String> lt = getPos(s.substring(0, i));
                if (lt.isEmpty()) {
                    continue;
                }
                // 3.2.获取右边字符串所有可能的数字
                List<String> rt = getPos(s.substring(i));
                if (rt.isEmpty()) {
                    continue;
                }

                // 4.拼接坐标字符串
                for (String x : lt) {
                    for (String y : rt) {
                        res.add("(" + x + ", " + y + ")");
                    }
                }
            }
            return res;
        }

        private List<String> getPos(String s) {
            List<String> pos = new ArrayList<>();
            // 5.1.不加小数点的情况
            if ("0".equals(s) || s.charAt(0) != '0') {
                pos.add(s);
            }
            // 5.2.加小数点的情况，模拟加小数点的位置
            for (int i = 1; i < s.length(); i++) {
                // 无法加小数点的情况直接跳过
                // 1：末尾为零；2：首位为零时，小数点只能在紧挨首位
                if (s.charAt(s.length() - 1) == '0' || (i != 1 && s.charAt(0) == '0')) {
                    continue;
                }
                pos.add(s.substring(0, i) + "." + s.substring(i));
            }
            return pos;
        }
    }
    // leetcode submit region end(Prohibit modification and deletion)

}
